#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>

#include <string.h>

// 打印n及其以内所有偶数
void printevens(int n){
   for(int i=n;i>=2; i--){
      if(i % 2 == 0) printf("%d ", i);
   }
   printf("\n");
}

// ./demo3 10 20 30 ... 
int main(int argc, const char *argv[]){
   if(argc < 2) return -1;
   int i=1;
   for(; i < argc; i++){
       if(fork() == 0){
	   break;  // 子进程不执行for循环，退出循环
       }  
   }

   if(i < argc){
      // 所有子进程的处理
      printf("--- pid(%d),ppid(%d) start ---\n", getpid(),getppid());
      sleep(5);
      printevens(atoi(argv[i]));
      printf("--- pid(%d),ppid(%d) end ---\n", getpid(),getppid());
      _exit(0); // 子进程退出
   }

   printf("---main waiting---\n");
   // 父进程的回收子进程的功能
   pid_t pid = -1;
   // 循环方式等待回收子进程的pcb, wait()返回-1表示所有子进程都回收
   while((pid = waitpid(0, NULL, WNOHANG | WUNTRACED )) != -1){
       if(pid != 0 )
         printf("wait pid is %d ok!\n", pid);
   }
   
   printf("----main over----\n");
   return 0;
}


